// 此例为了探索字符数组和字符串指针的区别，今后的代码中千万注意

#include <stdio.h>

int main(void)
{
	char str1[] = {'H', 'e', 'l', 'l', 'o'};
	// 上面的定义非常危险，因为这样只在栈中产生一个字符串，没有结束符，所以printf会有不确定的字符打出
	// 最好用以下方式定义：
	// char str1[] = {'H', 'e', 'l', 'l', 'o', '\0'};
	char str2[] = "Hello";
	// str2看起来和str1一样，其实不然，编译器会在后面加上结束符，从汇编代码可以看
	char* str3 = "Hello";
	// str3和str2是一样的吗？不是，str2是在栈中分配的，而str3只是一个指针，真正内容在rodata段
	
	printf("str1 is %s\n", str1);
	// 预期输出Hello加不确定字符
	printf("str2 is %s\n", str2);
	printf("str3 is %s\n", str3);
	// 后面两个输出是一样的都是Hello
}
